import re

from flask import request, current_app, make_response, jsonify

from info import redis_store, constants
from info.utils.response_code import RET
from . import passport_blu


# 获取验证码的路由
@passport_blu.route('/image_code')
def get_img_code():
    """获取图片验证码"""
    # 1.获取到当前图片的编号id
    code_id = request.args.get('code_id')

    # 2.生成验证码
    from info.utils.captcha import captcha
    name, text, image = captcha.generate_captcha()
    try:
        # 保存当前生成验证码的内容
        redis_store.set('ImageCode_' + code_id, constants.IMAGE_CODE_REDIS_EXPIRES, text)

    except Exception as e:
        current_app.logger.error(e)
        return make_response(jsonify(errno=RET.DATAERR, errmsg='保存图片验证码失败'))

    # 返回响应内容
    resp = make_response(image)
    # 设置内容类型

    resp.headers['Content-Type'] = 'image/jpg'

    return resp


@passport_blu.route('/smscode',methods=['POST'])
def send_sms():

    """
    1.接收参数，并判断是否有值
    2.校验手机号是否正确
    3.通过传入的图片编码去Redis中查询真实的图片验证码内容
    4.进行验证码内容的对比
    5.生成发送短信的内容并发送短信
    6.redis中保存短信验证码内容
    7.返回发送成功的响应
    :return:
    """
    # 1.接收参数，并判断是否有值

    # 取到请求值中的内容
    args_data = request.args
    mobile = args_data.get("mobile")
    image_code = args_data.get("image_code")
    image_code_id = args_data.get("image_code_id")

    if not all([mobile,image_code_id,image_code]):
        # 参数不全
        return jsonify(errno=RET.PARAMERR,errmsg="参数不全")

    # 2.校验手机号是否正确
    if not re.match("^1[3578][0-9]{9}$",mobile):
        # 提示手机号不正确
        return jsonify(errno=RET.DATAERR,errmsg="手机号不正确")
    # 3.通过传入的图片编码去Redis中查询真实的图片验证码内容
    try:
        real_image_code = redis_store.get("ImageCode_"+image_code_id)
        # 如果能取出来值，删除Redis中缓存的内容
    # 4.进行验证码内容的对比
    # 5.生成发送短信的内容并发送短信
    # 6.redis中保存短信验证码内容
    # 7.返回发送成功的响应


























